package com.junxonline.instant.admin.service.config;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.junxonline.instant.dao.entity.dto.common.RolePermissionInfoDTO;
import com.junxonline.instant.dao.entity.dto.ui.SelectNodeDTO;
import com.junxonline.instant.dao.entity.model.config.Role;
import com.junxonline.instant.dao.entity.vo.config.PermissionVO;
import com.junxonline.instant.dao.entity.vo.config.RoleVO;
import com.junxonline.instant.common.entity.common.CommonReqPage;
import com.junxonline.instant.common.entity.common.CommonRespPage;

import java.util.List;

/**
 * 角色管理接口
 *
 * @author JunX
 * @date 2021-06-24
 */
public interface RoleService extends IService<Role> {

    /**
     * 查询角色列表（Select）
     *
     * @param wrapper 条件查询器
     * @return List<SelectNodeDTO>
     */
    List<SelectNodeDTO> queryRoleList(Wrapper<Role> wrapper);

    /**
     * 查询角色列表
     *
     * @param vo      请求参数
     * @param wrapper 条件查询器
     * @return CommonRespPage<Role>
     */
    CommonRespPage<Role> queryList(CommonReqPage<RoleVO> vo, QueryWrapper<Role> wrapper);

    /**
     * 查询角色
     *
     * @param id ID
     * @return Role
     */
    Role query(Long id);

    /**
     * 新增角色
     *
     * @param role 请求参数
     */
    void add(Role role);

    /**
     * 编辑角色
     *
     * @param role 请求参数
     */
    void edit(Role role);

    /**
     * 删除角色
     *
     * @param ids 请求参数
     */
    void delete(List<Long> ids);

    /**
     * 查询角色权限
     *
     * @param vo 请求参数
     * @return RolePermissionInfoDTO
     */
    RolePermissionInfoDTO queryRolePermission(RoleVO vo);

    /**
     * 设置权限
     *
     * @param vo 请求参数
     */
    void setPermission(PermissionVO vo);

}
